#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <cstdint>
#include <sys/timerfd.h>

int main()
{
    //定时器定时的原理：每隔一段时间(定时器的超时时间)，系统就会给这个描述符对应的定时器写入一个8字节数据

    //int timerfd_create(int clockid, int flags);
    //创建定时器
    int timerfd = timerfd_create(CLOCK_MONOTONIC, 0);
    if(timerfd < 0)
    {
        perror("timerfd_create error");
        return -1;
    }
    //启动定时器
    //int timerfd_settime(int fd, int flags, const struct itimerspec *new_value, struct itimerspec *old_value);
    struct itimerspec itime;
    itime.it_value.tv_sec = 1; //第一次超时时间为1s
    itime.it_value.tv_nsec = 0;
    itime.it_interval.tv_sec = 5; //第一次超时后，每次超时的间隔时间
    itime.it_interval.tv_nsec = 0;
    timerfd_settime(timerfd, 0, &itime, nullptr);

    while(1)
    {
        uint64_t times; //64个比特位，8字节
        int ret = read(timerfd, &times, 8);
        if(ret < 0)
        {
            perror("read error");
            return -2;
        }
        printf("超时了，距离上一次超时了 %ld 次\n", times);
    }
    close(timerfd);
    
    return 0;
}